/**
 * @param {number[]} nums
 * @return {number[][]}
 */
 var subsetsWithDup = function(nums) {
    let path = [], res = []
    // 先把这个排序
    nums = nums.sort()
    const backTracking = function(startIndex){
      res.push([...path])
      if(startIndex >= nums.length){
        return
      }
      for(let i = startIndex;i < nums.length;i++){
        if(i > startIndex && nums[i] === nums[i-1]){
          // 如果i不是起始位置 同时该位置的数字和前一个相同 就退出此次循环 这是为了避免重复
          continue
        }
        path.push(nums[i])
        backTracking(i+1) // 从下一个开始
        path.pop()
      }
    }
    backTracking(0)
    return res
};